package com.example.demo01.knowledges

fun main() {
    //给每一段代码都加上注释
    //map、filter、forEach、let、apply、also、takeIf、run、with、
    //map
    val numbers = listOf(1, 2, 3, 4, 5)
    //map 对集合中的每个元素进行操作，返回一个新的集合
    val doubled = numbers.map { it * 2 }
    println(doubled)
    //filter
    //filter 对集合中的每个元素进行判断，返回一个新的集合
    val evenNumbers = numbers.filter { it % 2 == 0 }
    println(evenNumbers)
    //forEach
    //forEach 对集合中的每个元素进行操作，没有返回值
    numbers.forEach { println(it) }
    //let
    //let 对非空对象进行操作，返回一个新的对象
    val nullableString: String? = "Hello, World!"
    nullableString?.let {
        println(it.toUpperCase())
    }
    //apply
    //apply 对对象进行操作，没有返回值
    val builder = StringBuilder()
    builder.apply {
        append("Hello, ")
        append("World!")
    }
    println(builder.toString())
    //also
    //also 对对象进行操作，有返回值
    class Person(var name: String, var age: Number)

    val p1 = Person("张三", 19)
    p1.also {
        println(it.name + it.age)
    }
    /*//takeIf
    //takeIf 对对象进行判断，返回一个新的对象
    val p2 = p1.takeIf { it.age > 18 }
    println(p2?.name)*/
    //run
    //run 对对象进行操作，有返回值
    val p3 = p1.run {
        println(name + age)
        this
    }
    println(p3)
    //with
    //with 对对象进行操作，有返回值
    val p4 = with(p1) {
        println(name + age)
        this
    }
    println(p4)
}